/**
 * @desc  反转字典对象
 * @param {Object} obj 参考对象
 * @return {Object}
 */
export const reverseDict = obj => {
  if (Array.isArray(obj)) return obj.reverse()
  return Object.fromEntries(Object.entries(obj).map(([a, b]) => [b, a]))
}

/**
 * @desc  字典对象转选项
 * @param {Object} obj 参考对象
 * @return {Object}
 */
export const dict2Options = (o, t, v) => {
  return Object.entries(o).map(([k, i]) => ({ [t || 'label']: k, [v || 'value']: i }))
}

/**
 * @desc  选项转字典
 * @param {Object} obj 参考对象
 * @return {Object}
 */
export const options2Dict = (arr, t, v) => {
  let f = typeof t == 'function'
  return Object.fromEntries(arr.map(f && !v ? t : (i, d, a) => [f ? t(i, d, a) : i[t], v ? (typeof v == 'function' ? v(i, d, a) : i[v]) : i]))
}
